strana 352
----------
AnimaceTestPage.html
<script type="text/javascript">
  function onSilverlightError(sender, args) {
    var appSource = "";
    if (sender != null && sender != 0) {
      appSource = sender.getHost().Source;
    }

    var errorType = args.ErrorType;
    var iErrorCode = args.ErrorCode;

    if (errorType == "ImageError" || errorType == "MediaError") {
      return;
    }

    var errMsg = "Unhandled Error in Silverlight Application " 
      +  appSource + "\n" ;

    errMsg += "Code: "+ iErrorCode + "    \n";
    errMsg += "Category: " + errorType + "       \n";
    errMsg += "Message: " + args.ErrorMessage + "     \n";

    if (errorType == "ParserError") {
      errMsg += "File: " + args.xamlFile + "     \n";
      errMsg += "Line: " + args.lineNumber + "     \n";
      errMsg += "Position: " + args.charPosition + "     \n";
    }
    else if (errorType == "RuntimeError") { 
      if (args.lineNumber != 0) {
        errMsg += "Line: " + args.lineNumber + "     \n";
        errMsg += "Position: " +  args.charPosition + "     \n";
      }
      errMsg += "MethodName: " + args.methodName + "     \n";
    }

    throw new Error(errMsg);
  }
</script>


<body>
  <form id="form1" runat="server" style="height:100%">
  <div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," 
      type="application/x-silverlight-2" width="100%" height="100%">
      <param name="source" value="ClientBin/Animace.xap"/>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="4.0.41108.0" />
      <param name="autoUpgrade" value="true" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.41108.0" 
        style="text-decoration:none">
        <img src="http://go.microsoft.com/fwlink/?LinkId=161376" 
          alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object>
    <iframe id="_sl_historyFrame" 
      style="visibility:hidden;height:0px;width:0px;border:0px">
    </iframe></div>
  </form>
</body>



strana 363
----------
C#:
using System.IO;
using System.Text;
using System.Security.Cryptography;


private void button1_Click(object sender, RoutedEventArgs e)
{
  string sPassword = "Pass@word1";
  string sPasswordSalt = "ASDFGHJKL";

  AesManaged aes = new AesManaged();
  Rfc2898DeriveBytes deriveBytes = new Rfc2898DeriveBytes(sPassword, 
    Encoding.UTF8.GetBytes(sPasswordSalt));
  aes.Key = deriveBytes.GetBytes(128 / 8);
  MemoryStream stream = new MemoryStream();
  using (CryptoStream encrypt = new CryptoStream(stream, 
    aes.CreateEncryptor(), CryptoStreamMode.Write))
  {
    byte[] plaintextBytes =  UTF8Encoding.UTF8.GetBytes
      ("Babylonsk rybka, je mal, lut, trochu se podob pijavici.");
    encrypt.Write(plaintextBytes, 0, plaintextBytes.Length);
    encrypt.FlushFinalBlock();
    encrypt.Close();
    textBox1.Text = Convert.ToBase64String(stream.ToArray());
  }
}




strana 364
----------
C#:
private void button2_Click(object sender, RoutedEventArgs e)
{
  string sPassword = "Pass@word1";
  string sPasswordSalt = "ASDFGHJKL";

  AesManaged aes = new AesManaged();
  Rfc2898DeriveBytes deriveBytes = new Rfc2898DeriveBytes(sPassword, 
    Encoding.UTF8.GetBytes(sPasswordSalt));
  aes.Key = deriveBytes.GetBytes(128 / 8);
  byte[] encryptedBytes = Convert.FromBase64String(textBox1.Text);

  using (MemoryStream stream = new MemoryStream())
  {
    using (CryptoStream decrypt = new CryptoStream(stream, aes.CreateDecryptor(),
    CryptoStreamMode.Write))
    {
      decrypt.Write(encryptedBytes, 0, encryptedBytes.Length);
      decrypt.Flush();
      decrypt.Close();
      byte[] decryptedBytes = stream.ToArray();
      textBox2.Text = UTF8Encoding.UTF8.GetString(decryptedBytes, 0, 
      decryptedBytes.Length);
    }
  }
}



private void button1_Click(object sender, RoutedEventArgs e)
{
  string sPassword = "Pass@word1";
  string sPasswordSalt = "ASDFGHJKL";
  using (Aes aes = new AesManaged())
  {
    Rfc2898DeriveBytes deriveBytes = new Rfc2898DeriveBytes(sPassword, 
      Encoding.UTF8.GetBytes(sPasswordSalt));
    aes.Key = deriveBytes.GetBytes(128 / 8);

    IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
    IsolatedStorageFileStream isfs = new IsolatedStorageFileStream
      ("tajnosti.bin", FileMode.Create, isf);
    isfs.Write(BitConverter.GetBytes(aes.IV.Length), 0, sizeof(int));
    isfs.Write(aes.IV, 0, aes.IV.Length);

    using (CryptoStream cs = new CryptoStream(isfs, aes.CreateEncryptor(), 
      CryptoStreamMode.Write))
    {
      byte[] rawPlaintext = Encoding.Unicode.GetBytes
        ("Babylonsk rybka, je mal, lut, trochu se podob pijavici.");
      cs.Write(rawPlaintext, 0, rawPlaintext.Length);
      cs.FlushFinalBlock();
    }
  }
}



strana 371
----------
<Grid x:Name="LayoutRoot" Background="White">
  <Grid.RowDefinitions>
    <RowDefinition Height="30" />
    <RowDefinition Height="30" />
    <RowDefinition Height="30" />
    <RowDefinition Height="Auto" />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="150" />
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>

  <TextBlock Grid.Column="0" Grid.Row="0" Text="Jmno:   " />
  <TextBox x:Name="UserName" Grid.Column="1" Grid.Row="0" />
  <TextBlock Grid.Column="0" Grid.Row="1" Text="Heslo:" />
  <PasswordBox x:Name="UserPassword" Grid.Column="1" Grid.Row="1"  />
  <Button x:Name="btLogin" Content="Prihlas" Grid.Row="2" 
    Grid.Column="1" Click="btLogin_Click" />
</Grid>


strana 372
----------
<system.serviceModel>
  <services>
    <service name="System.Web.ApplicationServices.AuthenticationService"
      behaviorConfiguration="authServiceBehaviors">
      <endpoint contract="System.Web.ApplicationServices.AuthenticationService"
        binding="basicHttpBinding"
        bindingConfiguration="serviceBindingConfig"
        bindingNamespace="http://asp.net/ApplicationServices/v200"/>
    </service>
    <service name="System.Web.ApplicationServices.RoleService"
      behaviorConfiguration="roleServiceBehaviors">
      <endpoint contract="System.Web.ApplicationServices.RoleService"
        binding="basicHttpBinding"
        bindingConfiguration="serviceBindingConfig"
        bindingNamespace="http://asp.net/ApplicationServices/v200"/>
    </service>
  </services>

  <bindings>
    <basicHttpBinding>
      <binding name="serviceBindingConfig">
        <security mode="None"/>
      </binding>
    </basicHttpBinding>
  </bindings>

  <behaviors>
    <serviceBehaviors>
      <behavior name="authServiceBehaviors">
        <serviceMetadata httpGetEnabled="true"/>
      </behavior>
      <behavior name="roleServiceBehaviors">
        <serviceMetadata httpGetEnabled="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>


strana 373
----------
<system.web.extensions>
  <scripting>
    <webServices>
      <authenticationService enabled="true" requireSSL="false"/>
      <roleService enabled="true"/>
    </webServices>
  </scripting>
</system.web.extensions>


strana 374
----------
private void btLogin_Click(object sender, RoutedEventArgs e)
{

  AuthenticationServiceClient auth = new AuthenticationServiceClient();
  auth.LoginCompleted += 
    new EventHandler<LoginCompletedEventArgs>(LoginCompleted);
  auth.LoginAsync(UserName.Text, UserPassword.Password, string.Empty, 
  true, UserName.Text);
}

void LoginCompleted(object sender, LoginCompletedEventArgs e)
{

  if (e.Error != null) { MessageBox.Show(e.Error.Message); }
  else
  {
    if (!e.Result) { MessageBox.Show("Prihlaovn zlyhalo "); }
    else
    {
      // TODO: spech

    }
  }
}


strana 375
----------
//NAVRATOVE HODNOTY
  // 0  pihlen je OK
  // 1  nesprvn jmno nebo heslo
  // 2 - nesprvn role

  [WebMethod]
  public int OverUzivatele(string jmeno, string heslo, string role) 
  {
    bool bJmenoheslo;   //pokud sed jmno, heslo je true
    bool bRole;        //pokud sed role, heslo je true
    // ovme jmno a heslo
    bJmenoheslo = Membership.ValidateUser(jmeno, heslo);
    if (bJmenoheslo == false) return 1;

    //ovme roli
    bRole = Roles.IsUserInRole(jmeno,role);
    if (bRole == false) return 2;
    return 0; 
  }



